package com.masita.logica;

import java.sql.*;
import java.util.Vector;

import com.masita.util.Utilidad;

public class InteresVenta{
	
	public static final int INTERES_30 = 30;
	public static final int INTERES_60 = 60;
	public static final int INTERES_90 = 90;	
	
	private int id_venta;
	private int tipo_interes;	
	private String fecha;
	private double interes_actual;
	private double saldo_actual;
	private double interes_nuevo;
	private double saldo_nuevo;
	
	public InteresVenta(int id_v, int tipo_int, String fec, double inter_actual, 
			double sal_actual, double inter_nuevo, double sal_nuevo){
		this.id_venta = id_v;
		this.tipo_interes = tipo_int;
		this.fecha = new String(fec);
		this.interes_actual = inter_actual;
		this.saldo_actual = sal_actual;
		this.interes_nuevo = inter_nuevo;
		this.saldo_nuevo = sal_nuevo;		
	}

	// METODO GET DE LA CLASE *****************************
	/**
	 * @return Returns the interes_actual.
	 */
	public double getInteresActual() {
		return interes_actual;
	}

	/**
	 * @return Returns the interes_nuevo.
	 */
	public double getInteresNuevo() {
		return interes_nuevo;
	}

	/**
	 * @return Returns the fecha.
	 */
	public String getFecha() {
		return fecha;
	}

	/**
	 * @return Returns the id_venta.
	 */
	public int getIdVenta() {
		return id_venta;
	}

	/**
	 * @return Returns the saldo_actual.
	 */
	public double getSaldoActual() {
		return saldo_actual;
	}

	/**
	 * @return Returns the saldo_nuevo.
	 */
	public double getSaldoNuevo() {
		return saldo_nuevo;
	}

	/**
	 * @return Returns the tipo_interes.
	 */
	public int getTipoInteres() {
		return tipo_interes;
	}

	// METODO SET DE LA CLASE *****************************
	/**
	 * @param interes_actual The interes_actual to set.
	 */
	public void setInteresActual(double interes_actual) {
		this.interes_actual = interes_actual;
	}

	/**
	 * @param interes_nuevo The interes_nuevo to set.
	 */
	public void setInteresNuevo(double interes_nuevo) {
		this.interes_nuevo = interes_nuevo;
	}

	/**
	 * @param fecha The fecha to set.
	 */
	public void setFecha(String fecha) {
		this.fecha = fecha;
	}

	/**
	 * @param id_venta The id_venta to set.
	 */
	public void setIdVenta(int id_venta) {
		this.id_venta = id_venta;
	}

	/**
	 * @param saldo_actual The saldo_actual to set.
	 */
	public void setSaldoActual(double saldo_actual) {
		this.saldo_actual = saldo_actual;
	}

	/**
	 * @param saldo_nuevo The saldo_nuevo to set.
	 */
	public void setSaldoNuevo(double saldo_nuevo) {
		this.saldo_nuevo = saldo_nuevo;
	}

	/**
	 * @param tipo_interes The tipo_interes to set.
	 */
	public void setTipoInteres(int tipo_interes) {
		this.tipo_interes = tipo_interes;
	}

	// METODO S ESTATICOS DE LA CLASE *********************
	public static Vector getInteresesVenta(int id_v){
		Vector intereses = null;
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM interes_venta WHERE id_venta = "+id_v+" ORDER BY fecha DESC";
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( intereses  == null ) intereses = new Vector();
				intereses.addElement( new InteresVenta(rs.getInt("id_venta"), rs.getInt("tipo_interes"),
								 rs.getString("fecha"), 
								 rs.getDouble("interes_actual"), rs.getDouble("saldo_actual"), 
								 rs.getDouble("interes_nuevo"), rs.getDouble("saldo_nuevo")));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return intereses;
	}

	public static InteresVenta getInteresVenta(int id_v, int tipo_int){
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM interes_venta WHERE tipo_interes = " + 
								tipo_int + " AND id_venta = " + id_v;
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				return new InteresVenta(rs.getInt("id_venta"), rs.getInt("tipo_interes"),
										rs.getString("fecha"), rs.getDouble("interes_actual"), 
										rs.getDouble("saldo_actual"), rs.getDouble("interes_nuevo"), 
										rs.getDouble("saldo_nuevo"));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return null;
	}
	
	/**
	 * 
	 * @param venta
	 * @param tipo_interes
	 * @return
	 */
	public static InteresVenta crearInteresVenta(Venta venta, int tipo_interes){
		
		double saldoNuevo = venta.getSaldo();
		double interes = 0;
		
		switch( tipo_interes ){
			case INTERES_30:
				interes = Utilidad.INTERES_FINANCIADO_30;
				break;
			case INTERES_60:
				interes = Utilidad.INTERES_FINANCIADO_60;
				break;
			case INTERES_90:
				interes = Utilidad.INTERES_FINANCIADO_90;
				break;			
		}

		// Calcula el nuevo saldo
		saldoNuevo *= 1 + ( interes / 100 );		
		saldoNuevo = Utilidad.getDoubleDos(saldoNuevo);
		
		// Crea el interes
		InteresVenta interesVenta = new InteresVenta(venta.getIdVenta(),
				tipo_interes, Utilidad.getFechaHoy(), venta.getInteres(), 
				venta.getSaldo(), interes, saldoNuevo);
		
		return interesVenta;
	}

	// METODO GUARDARDATOS DE LA CLASE ********************
	public int guardarDatos(){
		try{
			Statement st = Conexion.getStatement();
			String sentencia;
			
			sentencia = "INSERT INTO interes_venta VALUES(" + this.id_venta
					+ "," + this.tipo_interes + ",'" + this.fecha + "',"
					+ this.interes_actual + "," + this.saldo_actual + "," 
					+ this.interes_nuevo + "," + this.saldo_nuevo + ")";

			st.executeUpdate(sentencia);
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		
		return this.id_venta;		
	}
	
	// METODO ELIMINAR DE LA CLASE ************************
	public boolean eliminar(){
		try{
			if( this.id_venta == 0 ) return false;
			
			Statement st = Conexion.getStatement();
			String sentencia = "DELETE FROM venta " + "WHERE id_venta = "
					+ this.id_venta + " AND " + "tipo_interes = "
					+ this.tipo_interes;
			st.executeUpdate(sentencia);
			this.id_venta = 0;
			
			return true;
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return false;
	}

}
